import { Toast } from 'vant'
/* 封装axios用于发送请求 */
import axios from 'axios'
import { removeToken, getToken } from './storage'
import router from '@/router'

// 创建一个新的axios实例(可以有多个基地址，多个请求拦截器和响应拦截器)
const request = axios.create({
  // 基地址
  baseURL: 'http://interview-api-t.itheima.net/h5',
  // 如果服务器在五秒后没有响应，这个数据就不要了
  timeout: 5000
})

// 添加请求拦截器
request.interceptors.request.use(function (config) {
  // 在请求拦截器中统一处理加载的loading
  const token = getToken()
  if (token) { // 避免登录注册的时候添加Authorization
    config.headers.Authorization = `Bearer ${token} `
  }
  // 在发送请求之前做些什么

  Toast.loading({
    message: '加载中...',
    forbidClick: true,
    overlay: true
  })
  return config
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error)
})

// 添加响应拦截器
request.interceptors.response.use(function (response) {
  // 对响应数据做点什么
  return response.data
}, function (error) {
  // 响应失败会进入到这个函数
  // 错误对象中.repsonse.data.code 401表示token失效
  if (error.response.data.code === 401) {
    // 1,提示
    Toast('身份认证失败,请重新登录')
    // 2,清除失效的token
    removeToken()
    // 3,清除完token后,跳转到登录页面
    router.push('/login')
  } else {
    // 除了token失效外,其他错误的提示
    Toast.fail(error.response.data.message)
  }
  return Promise.reject(error)
})

export default request
